stm32H750VB+sd卡+fatfs+freertos

您所在的位置:网站首页 stm32h750 lwip stm32H750VB+sd卡+fatfs+freertos

stm32H750VB+sd卡+fatfs+freertos

2023-07-29 09:33| 来源: 网络整理| 查看: 265

在使用stm32H750进行sd卡的fatfs实验时,遇到了一些bug,最终在他人帮助和自己研究下完成基本功能

完整工程链接:https://download.csdn.net/download/qq_40708778/19672005?spm=1001.2014.3001.5501

 

具体步骤

1.配置时钟电路

2.配置sys

要用到freertos,这里使用TIM1

3.配置SDMMC1

除了PC12的CLK线,其他全部软件上拉。这里如果不上拉,可能会出现SD卡挂载不上,报出FR_NOT_READY

打开中断,在开启freertos之后,优先级会自动被改成5

4.配置fatfs

第一个地方也可以选Chinese的。我直接用英文的。防止了cubeide报出RAM用完的一个错误,用keil的同学好像不用担心。

如果sd卡的格式不是fat32,而是exfat的话,这里一定要enable,不然会挂载失败,爆出FR_NOFILESYSTEM的错误

5.freertos设置

stack设置大一些

6.clock

下面给SDMMC1,2的时钟要配置成48,配合SDMMC1设置的SDMMC clock divide factor 设置成5。最后SD卡的写入频率为48/(5+2)=6M。这个数字要小于你sd卡能承受的最大写入速率。

7.程序给大一点heap和stack

 

注:用cubeide可能产生挂不上的bug。

程序部分

main函数基本不用改,只改动freertos.c

#include "FreeRTOS.h" #include "task.h" #include "main.h" #include "cmsis_os.h"

/* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */

#include "FreeRTOS.h" #include "task.h" #include "main.h" #include "cmsis_os.h" #include "fatfs.h" #include "sdmmc.h" UINT br,bw; //读写变量 char test_buf[1024] = {"0000\r\n"}; void StartDefaultTask(void const * argument) { /* init code for USB_DEVICE */ MX_USB_DEVICE_Init(); /* USER CODE BEGIN StartDefaultTask */ osDelay(10); retSD = f_mount(&SDFatFS,"",1); while(retSD) { retSD = f_mount(&SDFatFS,"",1); osDelay(10); } uint32_t time=0; uint32_t time2=0; char i; /* Infinite loop */ for(;;) { time = time2; test_buf[3] = time%10+'0'; time /= 10; test_buf[2] = time%10+'0'; time /= 10; test_buf[1] = time%10+'0'; time /= 10; test_buf[0] = time%10+'0'; retSD = f_open(&SDFile, "time.txt", FA_CREATE_ALWAYS | FA_WRITE | FA_READ); f_lseek(&SDFile,time2*5); retSD = f_write(&SDFile,&test_buf,strlen(test_buf),&bw) ; retSD = f_close(&SDFile); time2++; osDelay(100); }

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3